/**
 * 项目流程控制器
 */
const BaseProjectController = require('./base_project_controller.js');
const timeHelper = require('../config/project_helpers_config').timeHelper;

class ProjectFlowController extends BaseProjectController {

	/**
	 * 获取项目流程历史
	 * @param {*} params 
	 */
	async getFlowHistory(params) {
		// 提取参数
		let { projectId } = params;

		// 构建查询条件
		let where = {
			PROJECT_ID: projectId
		};

		// 构建排序条件 - 按时间倒序
		let orderBy = {
			FLOW_TIME: 'desc'
		};

		// 构建projection
		let fields = 'FLOW_ID,FLOW_TIME,FLOW_STATUS,FLOW_TARGET_STATUS,FLOW_EVENT,FLOW_TITLE,FLOW_NOTE,FLOW_OPERATOR_ID,FLOW_OPERATOR_NAME,FLOW_RESOURCES';

		// 获取流程历史数据
		let result = await this.getListByWhereAndOrderBy('research_flow_history', where, orderBy, fields);

		// 处理结果
		let list = result.list;

		// 格式化时间
		for (let i = 0; i < list.length; i++) {
			let item = list[i];
			item.FLOW_TIME_DISPLAY = timeHelper.timestamp2Time(item.FLOW_TIME, 'Y-M-D h:m:s');
		}

		return {
			result: 'ok',
			data: list
		};
	}
	
	/**
	 * 检查流转权限
	 * @param {Object} project 项目对象
	 * @param {Object} userInfo 用户信息
	 * @returns {Boolean} 是否有权限
	 */
	_checkFlowPermission(project, userInfo) {
		if (!project || !userInfo) return false;
		
		// 管理员有全部权限
		if (userInfo.IS_ADMIN) return true;
		
		// 项目创建者有权限
		if (project.USER_ID === userInfo.USER_ID) return true;
		
		// 其他情况根据项目权限配置判断
		const hasPermission = project.PERMISSIONS && 
			project.PERMISSIONS.some(permission => 
				permission.USER_ID === userInfo.USER_ID && 
				permission.HAS_FLOW_PERMISSION
			);
		
		return hasPermission;
	}
	
	/**
	 * 初始化分支选项
	 * @param {Array} branchProjects 分支项目列表
	 * @param {Object} project 当前项目
	 */
	_initBranchOptions(branchProjects, project) {
		if (!branchProjects || !Array.isArray(branchProjects)) {
			return [{ id: '', name: '主分支' }];
		}
		
		// 创建分支选项列表
		const branchOptions = [{ id: '', name: '主分支' }];
		
		// 添加分支选项
		branchProjects.forEach(branch => {
			if (branch && branch._id) {
				branchOptions.push({ 
					id: branch._id, 
					name: branch.PROJECT_TITLE || branch.PROJECT_NAME || '未命名分支'
				});
			}
		});
		
		return branchOptions;
	}
	
	/**
	 * 根据条件和排序获取列表
	 * @param {String} tableName 表名
	 * @param {Object} where 查询条件
	 * @param {Object} orderBy 排序条件
	 * @param {String} fields 字段列表
	 * @param {Number} page 页码
	 * @param {Number} size 每页记录数
	 * @returns {Object} 结果对象
	 */
	async getListByWhereAndOrderBy(tableName, where, orderBy, fields, page = 1, size = 100) {
		try {
			// 假设这里是实际的数据库查询操作
			// 由于这是前端控制器，不能直接访问数据库，我们调用云函数获取数据
			
			const params = {
				projectId: where.PROJECT_ID
			};
			
			const cloudHelper = require('../config/project_helpers_config').cloudHelper;
			const result = await cloudHelper.callCloudData('research_project/flow_history', params);
			
			return {
				list: result && result.data ? result.data : [],
				total: result && result.total ? result.total : 0
			};
		} catch (err) {
			console.error('获取列表失败', err);
			return {
				list: [],
				total: 0
			};
		}
	}
}

module.exports = ProjectFlowController; 